home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games Extra 1996 September / Amiga Games Extra CD-ROM 9-1996.iso / userbox / publicdomain / wbstars / source / wbstars_sys.c < prev    next >
C/C++ Source or Header  |  1996-07-09  |  6KB  |  304 lines

  1. /* $VER: WBStars_sys.c 1.23  (09.07.1996) */
  2.  
  3. #include "WBStars_include.h"
  4. #include "WBStars_protos.h"
  5. #include "WBStars_gui.h"
  6.  
  7. struct IntuitionBase    *IntuitionBase;
  8. struct GfxBase            *GfxBase;
  9. struct Library            *CxBase;
  10. struct DosLibrary        *DOSBase;
  11. struct Library            *GadToolsBase;
  12. struct Library            *DiskfontBase;
  13. struct Library            *UtilityBase;
  14.  
  15. struct    Screen        *Screen;
  16. struct    Window        *wnd;
  17. struct    RastPort    *RastP;
  18. short            maxx;
  19. short            maxy;
  20. char            gui=FALSE;
  21. char            idcmp=0;
  22. short            anzcolors;
  23.  
  24. char    GetWindow()
  25. {
  26.     char ok=FALSE;
  27.     ULONG    lock;
  28.     char    locked=TRUE;
  29.  
  30.     lock=LockIBase(0);
  31.     Screen    = IntuitionBase->FirstScreen;
  32.     if( ! strcmp(Screen->DefaultTitle,"Workbench Screen") )
  33.     {
  34.         if( mode==MODE_WIN )
  35.         {
  36.             wnd=Screen->FirstWindow;
  37.  
  38.             if( wnd )
  39.             {
  40.                 do
  41.                 {
  42.                     if( (wnd->Flags&WFLG_BACKDROP) && (wnd->Flags&WFLG_BORDERLESS) && (wnd->Flags&WFLG_WBENCHWINDOW) )
  43.                     {
  44.                         ok=TRUE;
  45.                         RastP        = wnd->RPort;
  46.                         anzcolors    = (short)(1<<(RastP->BitMap->Depth));
  47.                         maxx        = wnd->Width;
  48.                         maxy        = wnd->Height;
  49.                         UnlockIBase(lock);
  50.                         locked=FALSE;
  51.                         bgpen=bgpen%anzcolors;
  52.                         if(gui)    SetGadgets();
  53.                         NewStars();
  54.                     }
  55.                     else
  56.                     {
  57.                         wnd=wnd->NextWindow;
  58.                     }
  59.                 }while( !ok && wnd );
  60.             }
  61.         }
  62.         else
  63.         {
  64.             ok=TRUE;
  65.             RastP    = &(Screen->RastPort);
  66.             anzcolors    = (short)(1<<(RastP->BitMap->Depth));
  67.             maxx    = Screen->Width;
  68.             maxy    = Screen->Height;            
  69.             UnlockIBase(lock);
  70.             locked=FALSE;
  71.             bgpen=bgpen%anzcolors;
  72.             if(gui)    SetGadgets();
  73.             NewStars();
  74.         }
  75.     }
  76.  
  77.     if(locked)
  78.     {
  79.         UnlockIBase(lock);
  80.     }
  81.  
  82.     return ok;
  83. }
  84.  
  85. char    WinWait()
  86. {
  87.     ULONG    lock;
  88.     char    scrn;
  89.  
  90.     lock=LockIBase(0);
  91.     scrn=(char)(IntuitionBase->FirstScreen!=Screen);
  92.     UnlockIBase(lock);
  93.  
  94.     if( scrn||((mode==MODE_WIN)&& !CheckWindow2()) )
  95.     {
  96.         Delay( EVENT_WAIT );
  97.         ClearIfOk();
  98.         do
  99.         {
  100.             Delay( EVENT_WAIT );
  101.         }while( (CheckInteraction()==ACTIVE) && (GetWindow()==FALSE) );
  102.     }
  103.  
  104.     return (char)(status==ACTIVE);
  105. }
  106.  
  107. char    CheckWindow2()
  108. {
  109.     struct Window    *wnd2;
  110.     ULONG    lock;
  111.  
  112.     lock=LockIBase(0);
  113.  
  114.     wnd2=Screen->FirstWindow;
  115.     while( wnd2 && (wnd2!=wnd) )
  116.     {
  117.         wnd2=wnd2->NextWindow;
  118.     }
  119.  
  120.     UnlockIBase(lock);
  121.  
  122.     return (char)wnd2;
  123. }
  124.  
  125. char    CheckInteraction()
  126. {
  127.     CxMsg    *msg;
  128.     ULONG    msgid, msgtype;
  129.  
  130.     while(msg = (CxMsg *)GetMsg(broker_mp))
  131.     {
  132.         msgid = CxMsgID(msg);
  133.         msgtype = CxMsgType(msg);
  134.         ReplyMsg((struct Message *)msg);
  135.         switch(msgtype)
  136.         {
  137.             case CXM_COMMAND:
  138.             switch(msgid)
  139.             {
  140.                 case CXCMD_DISABLE:
  141.                     status=INACTIVE;
  142.                     ClearIfOk();
  143.                     Screen=NULL;
  144.                     wnd=NULL;
  145.                     ActivateCxObj(broker, 0L);
  146.                     break;
  147.                 case CXCMD_ENABLE:
  148.                     status=ACTIVE;
  149.                     ActivateCxObj(broker, 1L);
  150.                     break;
  151.                 case CXCMD_KILL:
  152.                     status=QUIT;
  153.                     ClearIfOk();
  154.                     if( gui )
  155.                     {
  156.                         CloseWBStarsWindow();
  157.                         CloseDownScreen();
  158.                     }
  159.                     break;
  160.                 case CXCMD_UNIQUE:
  161.                     if( !gui )
  162.                     {
  163.                         gui=OpenWBStarsWindow2();
  164.                     }
  165.                     else
  166.                     {
  167.                         WindowToFront(WBStarsWnd);
  168.                     }
  169.                     break;
  170.                 case CXCMD_APPEAR:
  171.                     if( !gui )
  172.                     {
  173.                         gui=OpenWBStarsWindow2();
  174.                     }
  175.                     else
  176.                     {
  177.                         WindowToFront(WBStarsWnd);
  178.                     }
  179.                     break;
  180.                 case CXCMD_DISAPPEAR:
  181.                     if( gui )
  182.                     {
  183.                         gui=FALSE;
  184.                         CloseWBStarsWindow();
  185.                         CloseDownScreen();
  186.                     }
  187.                     break;
  188.             }
  189.             break;
  190.         }
  191.     }
  192.  
  193.     if( gui )
  194.     {
  195.         HandleWBStarsIDCMP();
  196.         if( idcmp )
  197.         {
  198.             switch(idcmp)
  199.             {
  200.                 case IDC_HIDE:
  201.                     gui=FALSE;
  202.                     CloseWBStarsWindow();
  203.                     CloseDownScreen();
  204.                     break;
  205.                 case IDC_QUIT:
  206.                     status=QUIT;
  207.                     ClearIfOk();
  208.                     CloseWBStarsWindow();
  209.                     CloseDownScreen();
  210.                     break;
  211.             }
  212.             idcmp=0;
  213.         }
  214.     }
  215.  
  216.     return status;
  217. }
  218.  
  219. void    ClearIfOk()
  220. {
  221.     struct Screen *screen2;
  222.     char i;
  223.     ULONG    lock;
  224.  
  225.     if((mode==MODE_SCREEN)||CheckWindow2())
  226.     {
  227.  
  228.         lock=LockIBase(0);
  229.         screen2=IntuitionBase->FirstScreen;
  230.         while( screen2 && (screen2!=Screen) )
  231.         {
  232.             screen2=screen2->NextScreen;
  233.         }
  234.         UnlockIBase(lock);
  235.         if( screen2 )
  236.         {
  237.             for(i=0; i<anzstars; i++)
  238.             {
  239.                 ClearStar(i);
  240.             }
  241.         }
  242.     }
  243. }
  244.  
  245. char    OpenWBStarsWindow2()
  246. {
  247.     char ret=FALSE;
  248.  
  249.     if( SetupScreen()==0 )
  250.     {
  251.         if(OpenWBStarsWindow()==0)
  252.         {
  253.             ret=TRUE;
  254.             SetGadgets();
  255.         }
  256.         else
  257.         {
  258.             CloseDownScreen();
  259.         }
  260.     }
  261.  
  262.     return ret;
  263. }
  264.  
  265. void    SetGadgets()
  266. {
  267.     GT_SetGadgetAttrs(WBStarsGadgets[GD_azimut],WBStarsWnd,NULL,GTNM_Number,az,TAG_DONE);
  268.     GT_SetGadgetAttrs(WBStarsGadgets[GD_height],WBStarsWnd,NULL,GTNM_Number,he,TAG_DONE);
  269.     GT_SetGadgetAttrs(WBStarsGadgets[GD_azimut2],WBStarsWnd,NULL,GTIN_Number,az2,TAG_DONE);
  270.     GT_SetGadgetAttrs(WBStarsGadgets[GD_height2],WBStarsWnd,NULL,GTIN_Number,he2,TAG_DONE);
  271.     GT_SetGadgetAttrs(WBStarsGadgets[GD_mode_win],WBStarsWnd,NULL,GTCB_Checked,(mode==MODE_WIN),TAG_DONE);
  272.     GT_SetGadgetAttrs(WBStarsGadgets[GD_warp],WBStarsWnd,NULL,GTSL_Level,warpf,TAG_DONE);
  273.     GT_SetGadgetAttrs(WBStarsGadgets[GD_pri],WBStarsWnd,NULL,GTSL_Level,wbs_pri,TAG_DONE);
  274.     GT_SetGadgetAttrs(WBStarsGadgets[GD_stars],WBStarsWnd,NULL,GTSL_Level,anzstars,TAG_DONE);
  275.     GT_SetGadgetAttrs(WBStarsGadgets[GD_status],WBStarsWnd,NULL,GTCY_Active,(status==INACTIVE),TAG_DONE);
  276.     GT_SetGadgetAttrs(WBStarsGadgets[GD_bg_set],WBStarsWnd,NULL,GTIN_Number,bgpen,TAG_DONE);
  277. }
  278.  
  279. char    OpenLibraries()
  280. {
  281.     CxBase            = (struct Library*) OpenLibrary("commodities.library", 37L);
  282.     GadToolsBase    = (struct Library*) OpenLibrary("gadtools.library", 0);
  283.     DiskfontBase    = (struct Library*) OpenLibrary("diskfont.library", 0);
  284.     UtilityBase        = (struct Library*) OpenLibrary("utility.library", 0);
  285.     DOSBase            = (struct DosLibrary*) OpenLibrary("dos.library", 0);
  286.     IntuitionBase    = (struct IntuitionBase*) OpenLibrary("intuition.library",0);
  287.     GfxBase            = (struct GfxBase*) OpenLibrary("graphics.library",0);
  288.  
  289.     if( !IntuitionBase||!GfxBase||!CxBase||!GadToolsBase||!DiskfontBase||!UtilityBase||!DOSBase )
  290.         return FALSE;
  291.     return TRUE;    
  292. }
  293.  
  294. void    CloseLibraries()
  295. {
  296.     if(IntuitionBase)    CloseLibrary((struct Library*)IntuitionBase);
  297.     if(GfxBase)            CloseLibrary((struct Library*)GfxBase);
  298.     if(CxBase)            CloseLibrary( CxBase );
  299.     if(DOSBase)            CloseLibrary((struct Library*)DOSBase);
  300.     if(GadToolsBase)    CloseLibrary( GadToolsBase );
  301.     if(DiskfontBase)    CloseLibrary( DiskfontBase );
  302.     if(UtilityBase)        CloseLibrary( UtilityBase );
  303. }
  304.